import os
from colorama import init, Fore, Back, Style
import threading
import requests
import time
import sys
import subprocess
init()

art = '''
\033[0;1;31;91m▄\033[0;1;33;93m▄\033[0m    \033[0;1;36;96m▄\033[0;1;34;94m▄\033[0m    \033[0;1;31;91m▄\033[0;1;33;93m▄▄\033[0;1;32;92m▄\033[0m    \033[0;1;34;94m▄\033[0;1;35;95m▄\033[0m    \033[0;1;33;93m▄\033[0;1;32;92m▄\033[0m    \033[0;1;34;94m▄\033[0;1;35;95m▄▄\033[0;1;31;91m▄\033[0m   
\033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m   \033[0;1;33;93m██\033[0;1;32;92m▀▀\033[0;1;36;96m██\033[0m   \033[0;1;35;95m█\033[0;1;31;91m█\033[0m    \033[0;1;32;92m█\033[0;1;36;96m█\033[0m   \033[0;1;35;95m██\033[0;1;31;91m▀▀\033[0;1;33;93m██\033[0m  
\033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m  \033[0;1;31;91m█\033[0;1;33;93m█\033[0m    \033[0;1;36;96m█\033[0;1;34;94m█\033[0m  \033[0;1;35;95m█\033[0;1;31;91m█\033[0m    \033[0;1;32;92m█\033[0;1;36;96m█\033[0m 
\033[0;1;36;96m█\033[0;1;34;94m██\033[0;1;35;95m██\033[0;1;31;91m██\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m██\033[0;1;36;96m██\033[0;1;34;94m██\033[0;1;35;95m█\033[0m  \033[0;1;31;91m█\033[0;1;33;93m█\033[0m    \033[0;1;36;96m█\033[0;1;34;94m█\033[0m 
\033[0;1;34;94m█\033[0;1;35;95m█\033[0m    \033[0;1;33;93m█\033[0;1;32;92m█\033[0m  \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m 
\033[0;1;35;95m█\033[0;1;31;91m█\033[0m    \033[0;1;32;92m█\033[0;1;36;96m█\033[0m   \033[0;1;35;95m██\033[0;1;31;91m▄▄\033[0;1;33;93m██\033[0m   \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m   \033[0;1;36;96m██\033[0;1;34;94m▄▄\033[0;1;35;95m██\033[0m  
\033[0;1;31;91m▀\033[0;1;33;93m▀\033[0m    \033[0;1;36;96m▀\033[0;1;34;94m▀\033[0m    \033[0;1;31;91m▀\033[0;1;33;93m▀▀\033[0;1;32;92m▀\033[0m    \033[0;1;34;94m▀\033[0;1;35;95m▀\033[0m    \033[0;1;33;93m▀\033[0;1;32;92m▀\033[0m    \033[0;1;34;94m▀\033[0;1;35;95m▀▀\033[0;1;31;91m▀\033[0m
'''

def print_color_text(text):
    print(text, end='')

print_color_text(Fore.RED + art + Style.RESET_ALL)

def print_art():
    art = """
\033[0;1;31;91m▄\033[0;1;33;93m▄▄\033[0;1;32;92m▄▄\033[0m     \033[0;1;35;95m▄\033[0;1;31;91m▄▄\033[0;1;33;93m▄▄\033[0m       \033[0;1;35;95m▄\033[0;1;31;91m▄▄\033[0;1;33;93m▄\033[0m      \033[0;1;34;94m▄\033[0;1;35;95m▄▄\033[0;1;31;91m▄\033[0m               \033[0;1;32;92m▄▄\033[0;1;36;96m▄▄\033[0;1;34;94m▄\033[0m                \033[0;1;31;91m▄\033[0;1;33;93m▄▄\033[0;1;32;92m▄\033[0m   
\033[0;1;33;93m█\033[0;1;32;92m█▀\033[0;1;36;96m▀▀\033[0;1;34;94m██\033[0m   \033[0;1;31;91m█\033[0;1;33;93m█▀\033[0;1;32;92m▀▀\033[0;1;36;96m██\033[0m    \033[0;1;31;91m██\033[0;1;33;93m▀▀\033[0;1;32;92m██\033[0m   \033[0;1;34;94m▄\033[0;1;35;95m█▀\033[0;1;31;91m▀▀\033[0;1;33;93m▀█\033[0m             \033[0;1;32;92m█\033[0;1;36;96m▀▀\033[0;1;34;94m▀▀\033[0;1;35;95m██\033[0;1;31;91m▄\033[0m             \033[0;1;33;93m██\033[0;1;32;92m▀▀\033[0;1;36;96m██\033[0m  
\033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m  \033[0;1;31;91m█\033[0;1;33;93m█\033[0m    \033[0;1;36;96m█\033[0;1;34;94m█\033[0m  \033[0;1;35;95m█\033[0;1;31;91m█▄\033[0m                       \033[0;1;31;91m█\033[0;1;33;93m█\033[0m            \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m 
\033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m    \033[0;1;33;93m▀█\033[0;1;32;92m██\033[0;1;36;96m█▄\033[0m                 \033[0;1;31;91m▄\033[0;1;33;93m█▀\033[0m             \033[0;1;32;92m█\033[0;1;36;96m█\033[0m \033[0;1;34;94m██\033[0m \033[0;1;35;95m█\033[0;1;31;91m█\033[0m 
\033[0;1;34;94m█\033[0;1;35;95m█\033[0m    \033[0;1;33;93m█\033[0;1;32;92m█\033[0m  \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m       \033[0;1;34;94m▀█\033[0;1;35;95m█\033[0m              \033[0;1;31;91m▄\033[0;1;33;93m█▀\033[0m               \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m 
\033[0;1;35;95m█\033[0;1;31;91m█▄\033[0;1;33;93m▄▄\033[0;1;32;92m██\033[0m   \033[0;1;34;94m█\033[0;1;35;95m█▄\033[0;1;31;91m▄▄\033[0;1;33;93m██\033[0m    \033[0;1;34;94m██\033[0;1;35;95m▄▄\033[0;1;31;91m██\033[0m   \033[0;1;32;92m█\033[0;1;36;96m▄▄\033[0;1;34;94m▄▄\033[0;1;35;95m▄█\033[0;1;31;91m▀\033[0m            \033[0;1;31;91m▄\033[0;1;33;93m██\033[0;1;32;92m▄▄\033[0;1;36;96m▄▄\033[0;1;34;94m▄\033[0m     \033[0;1;33;93m██\033[0m      \033[0;1;35;95m██\033[0;1;31;91m▄▄\033[0;1;33;93m██\033[0m  
\033[0m"""
    print(art)

print_art()

animation = ["|", "/", "-", "\\"]
animation_duration = 0.1
animation_interval = 0.1

def loading_animation():
    start_time = time.time()
    while time.time() - start_time < animation_duration:
        for char in animation:
            print(f"\r[*]Scanning files... {char}", end="")
            time.sleep(animation_interval)
        if time.time() - start_time >= animation_duration:
            break
    print()  

files = {
    1: {"name": "ddos/Flood_attack/index.py", "description": "Flood attack"},
    2: {"name": "ddos/Server_attack/index.py", "description": "Server attack"},
    3: {"name": "ddos/Slow_Attack/index.py", "description": "Slow Attack"},
    4: {"name": "ddos/Protocol_specific_attack/index.py", "description": "Protocol specific attack"},
    5: {"name": "ddos/ipv6_attack/index.py", "description": "IPv6 DDOS attack"},
    6: {"name": "ddos/Other_attack/index.py", "description": "Other attack"},
}

def scan_py_files():
    for file_info in files.values():
        folder_path = os.path.dirname(file_info["name"])
        py_files = [f for f in os.listdir(folder_path) if f.endswith('.py') and f != 'index.py']
        file_info["description"] += f" ({len(py_files)})"

def print_art():
    print("\033[1;34;40m[*]hoho ddos2")
    print("\033[1;32;40m[*]Hello, this is hoho_ddos2.0, which is a DDOS attack program attacked by network hackers, with multiple DDOS attack types and methods. And that DDOS method will be updated in the future.")
    print('''\033[1;37;40m
 --------------------------------------
|        Project open source           |
|https://github.com/sansjtw/hoho_ddos2 |
|https://gitee.com/sansjtw/hoho_ddos2  |
|                                      |
|            Blog website              |
|http://dvrs3.osxo.cn/bb               |
|http://dvrss.ouuq.cn/f4               |
|                                      |
 --------------------------------------
''')
    print("\033[1;31;40m[-]Please use it for illegal purposes.")
    print("\033[1;37;40m")

def run_python_file(file_number):
    if file_number in files:
        file_info = files[file_number]
        file_name = file_info["name"]
        file_description = file_info["description"]
        if os.path.exists(file_name) and file_name.endswith('.py'):
            print("ok")
            subprocess.run([sys.executable, file_name])
        else:
            print("\033[1;31;40m[-]Error: File does not exist.")
            print("\033[1;37;40m")
    else:
        print("\033[1;31;40m[-]Error: Invalid selection.")
        print("\033[1;37;40m")

def main_menua():
    animationa = "|/-\\"
    for i in range(2):
       print("[*]List loading..."+animationa[i % len(animationa)], end='\r')
       time.sleep(0.1)

def main_menu():
    while True:
        main_menua()
        print()
        print_art()
        print("Please select an attack type:")
        for num, file_info in files.items():
            print(f"[{num}] {file_info['description']}")
        print("[7] 中文")
        print("[0] Exit")
        try:
            choice = int(input("Please enter the number: "))
            if choice == 0:
                print("[-]Exiting...")
                break
            elif choice == 7:
                subprocess.run([sys.executable, 'main_cn.py'])
                break
            else:
                run_python_file(choice)
        except ValueError:
            print("\033[1;31;40m[-]Invalid input. Please enter a number.")
            print("\033[1;37;40m")
        except Exception as e:
            print(f"\033[1;31;40m[-]An unexpected error occurred: {e}")
            print("\033[1;37;40m")

def main():
    loading_thread = threading.Thread(target=loading_animation)
    loading_thread.start()
    scan_py_files()
    loading_thread.join()
    main_menua()
    main_menu()

if __name__ == "__main__":
    main()
    
#sansjtw https://sansjtw.xyz https://github.com/sansjtw
#hoho_ddos2.6